home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / FusionIcon / execute.py < prev    next >
Text File  |  2008-11-09  |  2KB  |  64 lines

  1. # This file is part of Fusion-icon.
  2.  
  3. # Fusion-icon is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; either version 2 of the License, or
  6. # (at your option) any later version.
  7. #
  8. # Fusion-icon is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  15. #
  16. # Author(s): crdlb, nesl247
  17. #
  18. # Copyright 2007 Christopher Williams <christopherw@verizon.net> 
  19.  
  20. import subprocess, signal, os
  21.  
  22. # avoid zombies
  23. signal.signal(signal.SIGCHLD, signal.SIG_IGN)
  24.  
  25. def run(command, mode='spawn', quiet=False, env=None):
  26.     'Simple wrapper for the subprocess module. Supported modes: spawn, call, and output'
  27.  
  28.     try:
  29.         if mode == 'spawn':
  30.             if not quiet:
  31.                 popen_object = subprocess.Popen(command)
  32.             else:
  33.                 popen_object = subprocess.Popen(command, stdout=open(os.devnull, 'w'))
  34.         
  35.             return popen_object
  36.  
  37.         elif mode == 'call':
  38.             # restore normal child handling
  39.             signal.signal(signal.SIGCHLD, signal.SIG_DFL)
  40.             if not quiet:
  41.                 exitcode = subprocess.call(command, stderr=subprocess.PIPE)
  42.             else:
  43.                 exitcode = subprocess.call(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  44.  
  45.             # turn zombie protection back on
  46.             signal.signal(signal.SIGCHLD, signal.SIG_IGN)
  47.  
  48.             return exitcode
  49.  
  50.         elif mode == 'output':
  51.             signal.signal(signal.SIGCHLD, signal.SIG_DFL)
  52.             if not env:
  53.                 output = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=open(os.devnull, 'w')).communicate()[0]
  54.             else:
  55.                 output = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=open(os.devnull, 'w'), env=env).communicate()[0]
  56.  
  57.             signal.signal(signal.SIGCHLD, signal.SIG_IGN)
  58.  
  59.             return output
  60.  
  61.     except OSError:
  62.         print ' * execution of "%s" failed' % ' '.join(command)
  63.         return None
  64.